/*
 * File:    StatisticsInterface.java
 * Created: 24-Oct-2006
 * Version: $Id: //depot/bitgate/bsse/src/bitgate/util/statistics/StatisticsInterface.java#2 $
 *
 * COPYRIGHT (C) 2006, Bitgate Software, LLC.  All Rights Reserved.
 *
 * software@bitgatesoftware.com
 */

package com.bitgate.util.statistics;

import java.util.ArrayList;

/**
 * This is an interface class used with the <code>Statistics</code> engine.  It provides a way for the system to get a list
 * of statistics from a set of registered statistic classes.  The statistics contained within the class interface will
 * report key/value pairs for statistics that are ultimately either output to a file, or saved elsewhere.
 *
 * @author Kenji Hollis &lt;kenji@bitgatesoftware.com&gt;
 * @version $Id: //depot/bitgate/bsse/src/bitgate/util/statistics/StatisticsInterface.java#2 $
 */
public interface StatisticsInterface
{
    /**
     * Returns a set of statistics to be written to the output file.  Statistics are split by a tab character (\t), each
     * statistic being specific to the system outputting the information.  The statistics are not set in any specific order,
     * however, if there is to be any statistical analysis done, the format must remain constant.  All statistics output
     * data is to be set in an <code>ArrayList</code> of <code>ByteString</code> objects, such that the information that is
     * saved is <code>byte</code>-binary safe.
     *
     * @return <code>ArrayList&lt;String&gt;</code> containing lines of data.
     */
    ArrayList<String> getStatistics();

    /**
     * Tells the system to reset all currently gathered statistics.  This will tell the system to reset the snapshot, and
     * start from zero.  Some statistics already do this, so this call could be redundant to the statistics interface
     * in question.
     */
    void resetStatistics();
}
